package es.albarregas.ajax;
import es.albarregas.pruebas.CrearPatron;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import es.albarregas.modelo.ModelFacade;
import es.albarregas.modelo.Producto;

public class DibujarTablaProductosBuscados extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public DibujarTablaProductosBuscados() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	/* (non-Javadoc)
	 * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	 */
	protected String crearPatronMayusculasMinusculas(String cadena) {
		String cadenaMayusculas=cadena.toUpperCase();
		String cadenaMinusculas=cadena.toLowerCase();
		String patron="/";
		for (int i = 0; i < cadena.length(); i++) {
			patron+="["+cadenaMayusculas.charAt(i)+cadenaMinusculas.charAt(i)+"]";
		}
		
		patron="/";
		return patron;
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String textoBusqueda=request.getParameter("textoBusqueda");
		String categoria=request.getParameter("categoria");
		String coleccion=request.getParameter("coleccion");
		String precio=request.getParameter("precio");
		String tipoComparacionAltoString=request.getParameter("tipoComparacionAlto");
		Integer tipoComparacionAltoEntero=Integer.parseInt(tipoComparacionAltoString);
		String alto=request.getParameter("alto");
		String tipoComparacionAnchoString=request.getParameter("tipoComparacionAncho");
		Integer tipoComparacionAnchoEntero=Integer.parseInt(tipoComparacionAnchoString);	
		String ancho=request.getParameter("ancho");
		
		String tipoComparacionProfundidadString=request.getParameter("tipoComparacionProfundidad");
		Integer tipoComparacionProfundidadEntero=Integer.parseInt(tipoComparacionProfundidadString);	
		String profundidad=request.getParameter("profundidad");	
		
		
		response.setContentType("text/html;charset=UTF-8");
		//TODO QUITAR
		System.out.println("Entrando en DibujarTablaProductos");
		System.out.println("Recibido categoria-->"+categoria+" y coleccion-->"+coleccion);
		 
	    
		String clausulaWhere="";	
		
		if(textoBusqueda!=null && !textoBusqueda.trim().equals("") ){
			if(clausulaWhere.equals("")){
				clausulaWhere+="WHERE ";
			}else{
				clausulaWhere+=" AND ";
			}			
			clausulaWhere+=" Descripcion LIKE '%"+textoBusqueda+"%' ";
		}
		
		
		
		if(categoria!=null && !categoria.equals("todas")){
			if(clausulaWhere.equals("")){
				clausulaWhere+="WHERE ";
			}else{
				clausulaWhere+=" AND ";
			}
			clausulaWhere+="Codigo like '"+categoria+ "%'";
		}
		
		if(coleccion!=null && !coleccion.equals("todas")){
			if(clausulaWhere.equals("")){
				clausulaWhere+=" WHERE ";
			}
			clausulaWhere+=" AND Codigo like '__"+coleccion+ "%'";
		}
		if(precio!=null && !precio.equals("todas")){
			if(clausulaWhere.equals("")){
				clausulaWhere+="WHERE ";
			}else{
				clausulaWhere+=" AND ";
			}
			String[] vectorRangoValores=precio.split("-");			
			clausulaWhere+="Precio>"+vectorRangoValores[0]+" and Precio<"+vectorRangoValores[1];
		}
		
		String[] vectorTipoComparacion={"todas",">","=","<"};
		if(alto!=null && !alto.trim().equals("") && tipoComparacionAltoEntero!=null && !vectorTipoComparacion[tipoComparacionAltoEntero].equals("todas")){
			if(clausulaWhere.equals("")){
				clausulaWhere+="WHERE ";
			}else{
				clausulaWhere+=" AND ";
			}			
			clausulaWhere+="Alto"+vectorTipoComparacion[tipoComparacionAltoEntero]+alto;
		}
		
		if(ancho!=null && !ancho.trim().equals("") && tipoComparacionAnchoEntero!=null && !vectorTipoComparacion[tipoComparacionAnchoEntero].equals("todas")){
			if(clausulaWhere.equals("")){
				clausulaWhere+="WHERE ";
			}else{
				clausulaWhere+=" AND ";
			}			
			clausulaWhere+="ancho"+vectorTipoComparacion[tipoComparacionAnchoEntero]+ancho;
		}
		
		if(profundidad!=null && !profundidad.trim().equals("") && tipoComparacionProfundidadEntero!=null && !vectorTipoComparacion[tipoComparacionProfundidadEntero].equals("todas")){
			if(clausulaWhere.equals("")){
				clausulaWhere+="WHERE ";
			}else{
				clausulaWhere+=" AND ";
			}			
			clausulaWhere+="profundidad"+vectorTipoComparacion[tipoComparacionProfundidadEntero]+profundidad;
		}		
		//TODO QUITAR
		System.out.println("Clausula where para  ModelFacade.getProducto -->"+clausulaWhere);
		Collection<Producto> listaProductos = ModelFacade.getProducto(clausulaWhere);		
		String respuestaHTML="<table>";	
		respuestaHTML+="<tr><th>Foto</th><th>Descripcion</th><th>Concepto</th><th>Precio</th><th>Alto</th><th>Ancho</th><th>Profundidad</th></tr>";
		int contadorDeProductos=0;
		String contadorDeProductosHTML="";		
		for (Producto producto : listaProductos) {
			contadorDeProductos++;
			String  descripcionAbreviado=producto.getDescripcion();
			
			if(textoBusqueda!=null && !textoBusqueda.trim().equals("") ){
				String patronTextoBusqueda=CrearPatron.crearPatronMayusculasMinusculas(textoBusqueda);
				descripcionAbreviado=descripcionAbreviado.replaceAll(patronTextoBusqueda, textoBusqueda.toUpperCase());
				int principioBusqueda=(descripcionAbreviado.indexOf(textoBusqueda.toUpperCase())-20>0)?descripcionAbreviado.indexOf(textoBusqueda.toUpperCase())-20:0;
				int finBusqueda=(descripcionAbreviado.indexOf(textoBusqueda.toUpperCase())+textoBusqueda.length()+5<=descripcionAbreviado.length())?descripcionAbreviado.indexOf(textoBusqueda.toUpperCase())+textoBusqueda.length()+5:descripcionAbreviado.indexOf(textoBusqueda.toUpperCase())+textoBusqueda.length();
				descripcionAbreviado=descripcionAbreviado.substring(principioBusqueda,finBusqueda).replace(textoBusqueda.toUpperCase(), "<b>"+textoBusqueda.toUpperCase()+"</b>")+"...";


			}else{
				int principioBusqueda=0;
				int finBusqueda=(descripcionAbreviado.length()>20)?20: descripcionAbreviado.length();
				descripcionAbreviado=descripcionAbreviado.substring(principioBusqueda,finBusqueda)+"...";
			}			
				respuestaHTML+="<tr>";				
				respuestaHTML+="<td><img class=\"IMGBuscador\" src="+producto.getFoto()+" width=\"50\" height=\"50\" onclick=\"location.href='ctrlProcesarBusqueda?lugar=buscador&amp;codigo="+producto.getCodigo()+"';\"/></td>";
				respuestaHTML+="<td>"+descripcionAbreviado+"</td>";
				respuestaHTML+="<td>"+producto.getConcepto()+"</td>";
				respuestaHTML+="<td>"+producto.getPrecio()+"</td>";	
				respuestaHTML+="<td>"+producto.getAlto()+"</td>";	
				respuestaHTML+="<td>"+producto.getAncho()+"</td>";
				respuestaHTML+="<td>"+producto.getProfundidad()+"</td>";	
			respuestaHTML+="</tr>";
		}	
		
		respuestaHTML+="</table>";
		if(contadorDeProductos==0){
			contadorDeProductosHTML="<h3>No se han encontrado productos que coincidan con la busqueda</h3>";
		}else{
			String mostrar=(contadorDeProductos==1)?"un producto":String.valueOf(contadorDeProductos)+" productos";
			contadorDeProductosHTML="<h3>Se han encontrado "+mostrar+"</h3>";

		}
		
		PrintWriter out = response.getWriter();
		try {
			out.print(contadorDeProductosHTML+respuestaHTML);
		} finally {
			out.close();
		}		
		
		
	}

}
